package the.one.brand.net

import com.theone.common.ext.logI
import org.json.JSONObject
import rxhttp.wrapper.annotation.Parser
import rxhttp.wrapper.exception.ParseException
import rxhttp.wrapper.parse.AbstractParser
import rxhttp.wrapper.parse.TypeParser
import rxhttp.wrapper.utils.GsonUtil
import java.io.IOException
import java.lang.reflect.Type
import kotlin.jvm.Throws


//  ┏┓　　　┏┓
//┏┛┻━━━┛┻┓
//┃　　　　　　　┃
//┃　　　━　　　┃
//┃　┳┛　┗┳　┃
//┃　　　　　　　┃
//┃　　　┻　　　┃
//┃　　　　　　　┃
//┗━┓　　　┏━┛
//    ┃　　　┃                  神兽保佑
//    ┃　　　┃                  永无BUG！
//    ┃　　　┗━━━┓
//    ┃　　　　　　　┣┓
//    ┃　　　　　　　┏┛
//    ┗┓┓┏━┳┓┏┛
//      ┃┫┫　┃┫┫
//      ┗┻┛　┗┻┛
/**
 * @author The one
 * @date 2021/2/18 0018
 * @describe TODO
 * @email 625805189@qq.com
 * @remark
 */

@Parser(name = "Response")
open class ResponseParse<T> : TypeParser<T> {

    protected constructor() : super()

    constructor(type: Type) : super(type)

    @Throws(IOException::class)
    override fun onParse(response: okhttp3.Response): T{
        var data :T? = null
         response.body?.string()?.run {
            if(contains("error")){
                JSONObject(this).run {
                    val code = if(has("code")) getString("code") else "-1"
                    throw ParseException(code, getString("error"), response)
                }
            }else if(contains("Code")&&contains("message")){
                JSONObject(this).run {
                    throw ParseException(getString("Code"), getString("message"), response)
                }
            }else{
                data =  GsonUtil.fromJson(this, types[0])
            }
        }
        if(null == data){
            throw ParseException("-1", "错误", response)
        }
        return data as T
    }

}